大家好,歡迎來到數據新手村的第九天!在昨天的文章中,我們宏觀地介紹了 Olist 數據集的全貌,也認識了即將成為我們核心武器的 NumPy 函式庫。
理論說了再多,不如親自動手。今天,我們就要兌現承諾,正式在 PyCharm 中寫下我們的第一行 NumPy 程式碼,並深入探索我們所創造出來的 ndarray
陣列,究竟藏著哪些秘密。
讓我們打開 PyCharm,在 Numpy_Basics
資料夾中開啟我們的 Jupyter Notebook (.ipynb
) 檔案。
在開始之前,請確認專案環境中已經安裝了 NumPy。如果還沒,請先在 PyCharm 下方的「終端機 (Terminal)」中輸入以下指令來安裝:
pip install numpy
最基礎的陣列創建,就是從 Python 的 list 開始。
# 引入 numpy 函式庫,並使用 np 作為通用簡稱
import numpy as np
# --- 1. ndarray 的特性:多維性 (Multi-dimensionality) ---
# ndarray 支援從 0 維到更高維度
# arr = numpy.array(5) 原本是這樣,前面設定numpy as np
arr_0d = np.array(5) # 創建0維的ndarray陣列
print(arr_0d)
print('arr_0d 的維度:', arr_0d.ndim) # 陣列的維度 ndim = number of dimensions
arr_1d = np.array([1, 2, 3]) # 創建1維的ndarray陣列
print(arr_1d)
print('arr_1d 的維度:', arr_1d.ndim) # 陣列的維度 ndim = number of dimensions
arr_2d = np.array([ [1, 2, 3], [4, 5, 6]]) # 創建2維的ndarray陣列
print(arr_2d)
print('arr_2d 的維度:', arr_2d.ndim) # 陣列的維度 ndim = number of dimensions
輸出結果:
5
arr_0d 的維度: 0
[1 2 3]
arr_1d 的維度: 1
[[1 2 3]
[4 5 6]]
arr_2d 的維度: 2
# --- 2. ndarray 的特性:同質性 (Homogeneity) ---
# ndarray 的所有元素必須是同一種數據類型,不同類型會被強制向上轉型
arr_str = np.array([1, "hello"])
print(f"混合數字與字串陣列: {arr_str}") # 數字 1 會被轉成字串 '1'
arr_float = np.array([1, 2.5])
print(f"混合整數與浮點數陣列: {arr_float}") # 整數 1 會被轉成浮點數 1.0
輸出結果:
混合數字與字串陣列: ['1' 'hello']
混合整數與浮點數陣列: [1. 2.5]
現在已經成功創建了 ndarray 物件,但這個物件內部究竟長什麼樣子?可以透過它的「屬性 (Attributes)」來一探究竟。
可以把「屬性」想像成是一個陣列的「身分證」或「規格表」。學會讀懂這些屬性,是未來進行陣列操作與除錯的基礎。
.ndim - 陣列的維度
.ndim 屬性告訴我們這個陣列是幾維的,剛剛在創建時已經看過了。
.shape - 陣列的形狀
.shape 屬性可能是最重要的屬性之一。它用一個元組 (tuple) 來表示陣列在「每一個維度」上的大小(例如:幾列 x 幾欄)。
.size - 元素的總個數
.size 屬性告訴我們這個陣列中總共有多少個元素。它等於 .shape 元組中所有數字的乘積。
.dtype - 元素的資料類型
.dtype (data type) 屬性揭示了陣列中元素的資料類型。由於 NumPy 的「同質性」特性,一個陣列只會有一個 dtype。
深入 dtype:為何 int8 最多到 127?
NumPy 提供了非常精細的資料類型,例如 int8, uint8 等。int8 代表使用 8 個位元 (bits) 儲存的「有號」整數。電腦會犧牲 1 個位元來表示正負號,剩下 7 個位元來表示數值,因此範圍是從 -128 到 127。而 uint8 (無號整數) 則將 8 個位元全部用於表示數值,範圍是 0 到 255。
輸出結果:
1
陣列的維度: 0
陣列的形狀: ()
元素的個數: 1
元素的數據類型: int64
元素的轉置: 1
輸出結果:
[1. 2.5 3. ]
陣列的維度: 1
陣列的形狀: (3,)
元素的個數: 3
元素的數據類型: float64
元素的轉置: [1. 2.5 3. ]
輸出結果:
[[1 2 3]
[4 5 6]]
陣列的維度: 2
陣列的形狀: (2, 3)
元素的個數: 6
元素的數據類型: int64
元素的轉置:
[[1 4]
[2 5]
[3 6]]
今天正式踏出了程式實作的第一步,不僅成功創建了 NumPy 陣列,還學會了如何檢視它的內部規格。在所有屬性中,請務必記住 .shape 和 .dtype,它們是未來判斷資料狀態最重要的兩個指標。
既然已經能看懂陣列的結構了,明天 Day 10,將學習 NumPy 中更多、更強大的陣列創建方法,學會如何「無中生有」,為各種情境快速產生需要的陣列。敬請期待!